<?php
Class HashMap{
var $H_table;

  /*
   * HashMap
   */
  public function __construct() {
   $this->H_table = array ();
  }

public function put($key, $value) {
  if (!array_key_exists($key, $this->H_table)) {
     $this->H_table[$key] = $value;
     return null;
  } else {
     $tempValue = $this->H_table[$key];
     $this->H_table[$key] = $value;
     return $tempValue;
  }
  }
  

  public function get($key) {
   if (array_key_exists($key, $this->H_table))
    return $this->H_table[$key];
   else
    return null;
  }

 
  public function remove($key) {
   $temp_table = array ();
   if (array_key_exists($key, $this->H_table)) {
    $tempValue = $this->H_table[$key];
    while ($curValue = current($this->H_table)) {
     if (!(key($this->H_table) == $key))
      $temp_table[key($this->H_table)] = $curValue;

     next($this->H_table);
    }
    $this->H_table = null;
    $this->H_table = $temp_table;
    return $tempValue;
   } else
    return null;
  }
  
 
  public function keys(){
   return array_keys($this->H_table);
  }
 
  public function values(){
   return array_values($this->H_table);
  }
  

  public function putAll($map){
   if(!$map->isEmpty()&& $map->size()>0){
    $keys = $map->keys();
    foreach($keys as $key){
     $this->put($key,$map->get($key));
    }
   }
  }
  
 
  public function removeAll() {
   $this->H_table = null;
   $this->H_table = array ();
  }

  public function containsValue($value) {
    while ($curValue = current($this->H_table)) {
     if ($curValue == $value) {
      return true;
     }
     next($this->H_table);
    }
    return false;
  }

  public function containsKey($key) {
    if (array_key_exists($key, $this->H_table)) {
     return true;
    } else {
     return false;
    }
  }


  public function size() {
   return count($this->H_table);
  }

  
 
  public function isEmpty() {
   return (count($this->H_table) == 0);
  }

 
  public function toString() {
   print_r($this->H_table);
  }
}
?>